Welcome to pandas!

8.6 指定行、列方向数据可互转

df.melt()函数是将指定列数据转换到行方向,如果要做相反操作,则可用df.pivot()

此函数可以将行方向的数据调整到列方向显示,转换结果类似数据透视表,不过此函数不支持数据聚合,结构如下:

df.pivot(index=None,colunms=None,values=None)

index :指定用于创建DataFrame表格行索引的列

columns :指定用于创建DataFrame表格列索引的列,

values :用于填充新DataFrame表格值的列,如果未指定,则将使用所有剩余列,如果将是分层索引。


import pandas as pd

df=pd.read_excel(r "D:\Pyobject2023\object\测试\素材\1.8.06 指定行、列方向数据可互转.xlsx" )

print (df)

t=df.pivot(

index = "姓名" ,

columns = "科目"

)

print (t)

返回:

姓名 科目 分数
0 李四 数学 71
1 李四 语文 70
2 李四 英语 70
3 王麻子 数学 72
4 王麻子 语文 82
5 王麻子 英语 61
6 张三 数学 86
7 张三 语文 82
8 张三 英语 91

分数
科目 数学 英语 语文
姓名
张三 86 91 82
李四 71 70 70
王麻子 72 61 82

import pandas as pd

df=pd.read_excel(r "D:\Pyobject2023\object\测试\素材\1.8.06 指定行、列方向数据可互转.xlsx" , 1 )

print (df)

t=df.pivot(

index = "姓名" ,

columns =[ "年份","半年" ],

values = [ "数量1", "数量2" ]

)

print (t)

返回:

姓名 年份 半年 数量1 数量2
0 张三 2018年 上半年 160 112
1 张三 2018年 下半年 121 101
2 张三 2019年 上半年 156 189
3 张三 2019年 下半年 141 124
4 李四 2018年 上半年 170 129
5 李四 2018年 下半年 163 144
6 李四 2019年 上半年 178 197
7 李四 2019年 下半年 105 142
8 五麻子 2018年 上半年 122 174
9 五麻子 2018年 下半年 195 151
10 五麻子 2019年 上半年 131 185
11 五麻子 2019年 下半年 125 170

数量1 数量2
年份 2018年 2019年 2018年 2019年
半年 上半年 下半年 上半年 下半年 上半年 下半年 上半年 下半年
姓名
五麻子 122 195 131 125 174 151 185 170
张三 160 121 156 141 112 101 189 124
李四 170 163 178 105 129 144 197 142

import pandas as pd

df=pd.read_excel(r "D:\Pyobject2023\object\测试\素材\1.8.06 指定行、列方向数据可互转.xlsx" , 2 )

print (df)

t=df.pivot_table(

index = "日期" ,

columns =[ "产品" ],

aggfunc ={ "金额":"sum" }

)

print (t)

#如第0、1行数据有重复,所以不能用pivot了,只能用数据透视pivot_table了

日期 产品 金额
0 2024-04-01 A 87
1 2024-04-01 A 100
2 2024-04-01 B 60
3 2024-04-02 A 85
4 2024-04-02 B 82
5 2024-04-02 B 76
6 2024-04-02 A 62
7 2024-04-03 A 64
8 2024-04-03 C 64

金额
产品 A B C
日期
2024-04-01 187.0 60.0 NaN
2024-04-02 147.0 158.0 NaN
2024-04-03 64.0 NaN 64.0